#include "ch_pro.h"
#include <stdlib.h>
#include <unistd.h>
#include <time.h>

void my_total()
{
    int num;
f:
    
    printf("以下是所有小功能模块：\n");
    printf("1.猜数字小游戏   \t 2.任意层数金字塔   \t 3.学生成绩排序以及等级划分\n");
    printf("点击数字1即可使用功能1\t点击数字1即可使用功能2\t点击数字1即可使用功能3\t点击数字4即可退出系统\n");
    while (1)
    {

        scanf("%d", &num);
        if (num == 1)
        {
            printf("您已进入功能1:\t猜数字小游戏\n");
            guess_num();
            printf("功能已经实现完毕\n");
            printf("点击1即可返回菜单   \t 点击其他任意按键即可退出系统\n");
            while (1)
            {
                scanf("%d", &num);
                if (num == 1)
                {
                    printf("您已返回菜单\n");
                    goto f;
                }
                else
                    return;
            }
        }
        if (num == 2)
        {
            printf("您已进入功能2:\t任意层数金字塔\n");
            jinzita();
            printf("功能已经实现完毕\n");
            printf("点击1即可返回菜单   \t 点击其他任意按键即可退出系统\n");
            while (1)
            {
                scanf("%d", &num);
                if (num == 1)
                {
                    printf("您已返回菜单\n");
                    goto f;
                }
                else
                    return;
            }
        }
        if (num == 3)
        {
            printf("您已进入功能3:\t学生成绩排序以及等级划分\n");
            stu_grade();
            printf("功能已经实现完毕\n");
            printf("点击1即可返回菜单   \t 点击其他任意按键即可退出系统\n");
            while (1)
            {
                scanf("%d", &num);
                if (num == 1)
                {
                    printf("您已返回菜单\n");
                    goto f;
                }
                else
                    return;
            }
        }
        if (num == 4)
        {

            return;
        }
        printf("请重新输入！！！\t不要乱搞!!! \n");
    }
}

void guess_num()
{
    int max = 100;
    int min = 0;
    int num = 0; // 输入数据
    int tem = 0; // 随机数据
    srand(time(NULL));
    tem = rand() % 100 + 1;
    // printf("%d", tem);
    while (1)
    {
        printf("请输入[%d,%d]的数字,来猜测随机数\n", min, max);
        scanf("%d", &num);
        if (num >= max || num <= min) // 判断是否超出范围
            printf("不要乱搞！！！\n");
        else
        {
            if (num == tem)
            {
                printf("恭喜你猜对了，数字就是%d \n", num);
                break;
            }
            if (num > tem)
            {
                max = num;
                printf("数字大了，请输入[%d,%d]的数字！\n", min, max); // 猜的数字偏大
            }
            if (num < tem)
            {
                min = num;
                printf("数字小了，请输入[%d,%d]的数字！\n", min, max); // 猜的数字偏小
            }
        }
    }

    return;
}

void jinzita()
{
    int n = 0;
    printf("请输入一个数字来代表金字塔层数：");
    scanf("%d", &n);
    for (int i = 0; i < n; i++) // 金字塔高度
    {
        for (int j = 0; j < n - i; j++) // 每一层所需空格
        {
            printf(" ");
        }
        for (int j = 0; j < 2 * i - 1; j++) // 每一层所需*号
        {
            printf("*");
        }
        printf("\n");
    }
    return;
}

void stu_grade()
{
    int num = 0;
    int tmp = 0;
    while (1) // 确定用户输入的人数没有乱搞
    {
        printf("请输入一个数字来代表所需要成绩排序和评判等级的人数");
        scanf("%d", &num);
        if (0 == num)
        {
            printf("不要乱搞，请输入正常的数字！\n");
        }
        else
            break;
    }

    int grade[num];

    srand(time(NULL));

    for (int i = 0; i < num; i++) // 取随机数
    {
        grade[i] = rand() % 100 + 1;
    }
    for (int i = 0; i < num - 1; i++) // 冒泡排序的次数
    {
        for (int j = 0; j < num - i - 1; j++) // 一次冒泡排序
        {
            if (grade[j] > grade[j + 1])
            {
                tmp = grade[j];
                grade[j] = grade[j + 1];
                grade[j + 1] = tmp;
            }
        }
    }
    for (int i = num - 1; i >= 0; i--) // 判断学生成绩等级
    {
        // printf("%d\n", grade[i]);
        if (90 <= grade[i] && grade[i] <= 100)
            printf("学生成绩为 %d\t等级为A\n", grade[i]);
        else if (80 <= grade[i] && grade[i] < 90)
            printf("学生成绩为 %d\t等级为B\n", grade[i]);
        else if (70 <= grade[i] && grade[i] < 80)
            printf("学生成绩为 %d\t等级为C\n", grade[i]);
        else if (60 <= grade[i] && grade[i] < 70)
            printf("学生成绩为 %d\t等级为D\n", grade[i]);
        else if (0 <= grade[i] && grade[i] <= 60)
            printf("学生成绩为 %d\t等级为不及格\n", grade[i]);
        else
            printf("成绩范围只能是0-100\n");
    }

    return;
}